package com.zengde.chapter1.config;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DroolsConfig {
    private static final String RULES_PATH = "rules/";  // 规则文件在 resources 下的路径

    // 初始化 KieContainer（规则容器）
    @Bean
    public KieContainer kieContainer() {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        
        // 加载规则文件（支持加载多个 .drl 文件，此处以 person-rule.drl 为例）
        kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + "person-rule.drl"));
        
        // 编译规则
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
        kieBuilder.buildAll();
        KieModule kieModule = kieBuilder.getKieModule();
        
        return kieServices.newKieContainer(kieModule.getReleaseId());
    }

    // 创建 KieSession（规则执行会话）
    @Bean
    public KieSession kieSession() {
        return kieContainer().newKieSession();
    }
}